import axios from 'axios';
import { Message } from 'element-ui'; // Element UI 提示组件
import router from '../router'; // 导入路由实例

// 设置基础 URL
let hostURL = 'http://47.122.127.125:9001';
// let hostURL = 'http://localhost:9002'; // 本地调试时使用

// 创建 axios 实例
const request = axios.create({
  baseURL: hostURL,
  timeout: 15000,
});

// 请求拦截器：在请求发送之前添加 Token
request.interceptors.request.use(
  (config) => {
    const token = localStorage.getItem('token'); // 从本地存储中获取 Token
    if (token) {
      config.headers['Authorization'] = `Token ${token}`; // 添加 Token 到请求头
    }
    return config;
  },
  (error) => {
    return Promise.reject(error);
  }
);

// 响应拦截器：处理响应错误
request.interceptors.response.use(
  (response) => {
    return response.data;
  },
  (error) => {
    if (error.response) {
      switch (error.response.status) {
        case 401:
          // Token 无效或未登录，跳转到登录页
          Message.error('登录已过期，请重新登录');
          localStorage.removeItem('token'); // 清除本地存储的 Token

          // 检查当前路由是否是 /login，避免重复导航
          if (router.currentRoute.path !== '/login') {
            router.push('/login').catch(() => {});
          }
          break;
        case 403:
          Message.error('无权限访问');
          break;
        case 404:
          Message.error('资源未找到');
          break;
        case 500:
          Message.error('服务器内部错误');
          break;
        default:
          Message.error(`请求失败：${error.response.status}`);
      }
    } else {
      Message.error('网络错误，请检查网络连接');
    }
    return Promise.reject(error);
  }
);

export default request;